package com.anrong.wulansdk.sdk.interfaces;

import java.io.BufferedReader;
import java.io.ByteArrayOutputStream;
import java.io.DataOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.URL;

import com.anrong.wulansdk.MainActivity;
import com.anrong.wulansdk.sdk.utils.MyLogcat;

import android.content.Context;
import android.widget.Toast;

/**
 * 联网请求工具类
 * @author cxy
 *
 */
public class WLHttpUtil {

//	private static final long CONN_TIMEOUT = 60*1000;
//	private static final long READ_TIMEOUT = 60*1000;
//	private static final long WRITE_TIMEOUT = 60*1000;



//	public static <T> void post(String json, AbsCallback<T> callback){
//		post(DataURL.log(), json, callback);
//	}
//
//	/**
//	 * post json
//	 * @param <T>
//	 * @param url
//	 * @param json
//	 */
//	public static <T> void post(String url, String json, AbsCallback<T> callback){
//
//		try {
//			MyLogcat.log("wl post");
//			OkHttpUtils.getInstance().post(url)
//			.postJson(json)
//			.headers("logType", "base")
//			//可以全局统一设置缓存模式,默认就是Default,可以不传,具体其他模式看 github 介绍 https://github.com/jeasonlzy0216/
//			//			            .cacheMode(CacheMode.DEFAULT)
//			//可以全局统一设置缓存时间,默认永不过期,具体使用方法看 github 介绍
//			//			            .cacheTime(CacheEntity.CACHE_NEVER_EXPIRE)
//			//可以设置tips的证书,以下几种方案根据需要自己设置,不需要不用设置
//			//                    .setCertificates()                                  //方法一：信任所有证书
//			//                    .setCertificates(getAssets().open("srca.cer"))      //方法二：也可以自己设置https证书
//			//                    .setCertificates(getAssets().open("aaaa.bks"), "123456", getAssets().open("srca.cer"))//方法三：传入bks证书,密码,和cer证书,支持双向加密
//			//                    .addCommonHeaders(headers)      //设置全局公共头
//			//                    .addCommonParams(params);       //设置全局公共参数
//			.execute(callback);
//
//			/*	callback一共有以下 7 个回调,除onResponse必须实现以外,其余均可以按需实现,每个方法参数详细说明,请看下面第6点:
//		    parseNetworkResponse():解析网络返回的数据回调
//			onBefore():网络请求真正执行前回调
//			onResponse():网络请求成功的回调
//			onError():网络请求失败的回调
//			onAfter():网络请求结束的回调,无论成功失败一定会执行
//			upProgress():上传进度的回调
//			downloadProgress():下载进度的回调
//			 */
//
//
//		} catch (Exception e) {
//			e.printStackTrace();
//		}
//	}


//	public static <T> void get(String url, AbsCallback<T> callback){
//		OkHttpUtils.get(url).execute(callback);
//	}





	/**
	 * 上传json字符串
	 * @param strJson	json字符串
	 * @return
	 */
	public static void postJson(final String strJson, final HttpListener listener) {
		new Thread(){@Override
		public void run() {
			String returnLine = "";
			int code = 0;
			HttpURLConnection conn= null;
			try {

				URL my_url = new URL(DataURL.log());
				conn = (HttpURLConnection) my_url.openConnection();
				conn.setDoOutput(true);
				conn.setDoInput(true);
				conn.setRequestMethod("POST");
				conn.setUseCaches(false);
				conn.setConnectTimeout(30*1000);
				conn.setReadTimeout(30 * 1000);
//			    connection.setInstanceFollowRedirects(true);
				conn.setRequestProperty("Charsert", "UTF-8");
				conn.setRequestProperty("Content-Type", "application/json; charset=UTF-8");
				conn.setRequestProperty("Connection", "Keep-Alive");
				conn.setRequestProperty("logType", "base");

//			   Map<String, List<String>> requestProperties = conn.getRequestProperties();

				DataOutputStream out = new DataOutputStream(conn
						.getOutputStream());

				byte[] content = strJson.getBytes("UTF-8");

				out.write(content);
				out.flush();
				out.close(); // flush and close

				if (conn.getResponseCode() == 200) {
					returnLine = getStringFromInputStream(conn.getInputStream());
					listener.onSuccess(returnLine);
				}else{
					listener.onFail(new Exception("upload failed"));
				}

//			   //读
//			   BufferedReader reader = new BufferedReader(new InputStreamReader(conn.getInputStream()));
//			   String line = "";
//			   while ((line = reader.readLine()) != null) {
//			    returnLine += line;
//			   }
			} catch (Exception e) {
				e.printStackTrace();
			} finally{
				if (conn!=null) {
					conn.disconnect();
				}
			}
		}}.start();
	}


	/**
	 * get请求
	 */
	public static void getLocationInfo(final double latitude, final double longitude, final HttpListener listener ){
		new Thread(){@Override
			public void run() {
			HttpURLConnection conn = null;
			try {
				URL url = new URL(DataURL.locaiton(latitude, longitude));
				//打开连接
				conn = (HttpURLConnection) url.openConnection();
				// 设置请求方法，默认是GET
				conn.setRequestMethod("GET");
				// 设置字符集
				conn.setRequestProperty("Charset", "UTF-8");
				// 设置文件类型
				conn.setRequestProperty("Content-Type", "text/xml; charset=UTF-8");
				// 设置请求参数，可通过Servlet的getHeader()获取
//				conn.setRequestProperty("Cookie", "AppName=" + URLEncoder.encode("你好", "UTF-8"));
				// 设置自定义参数
//				conn.setRequestProperty("MyProperty", "this is me!");

				if(conn.getResponseCode()==200){  
					//访问成功，通过流取的页面的数据信息  
					String result = getStringFromInputStream(conn.getInputStream());
					listener.onSuccess(result);
				}else{  
					listener.onFail(new Exception("get locationInfo failed"));
				}

			}  catch (IOException e) {
				listener.onFail(e);
				e.printStackTrace();
			}	finally {
				if(conn != null){
					conn.disconnect();
				}
			}
		}}.start();
	}




	/** 
	 * 通过字节输入流返回一个字符串信息 
	 * @param is 
	 * @return 
	 * @throws IOException  
	 */  
	private static String getStringFromInputStream(InputStream is) throws IOException {  
		ByteArrayOutputStream baos = new ByteArrayOutputStream();  
		byte[] buffer = new byte[1024];  
		int len=0;  
		while((len=is.read(buffer))!=-1){  
			baos.write(buffer, 0, len);  
		}  
		is.close();  
		String status = baos.toString();// 把流中的数据转换成字符串, 采用的编码是: utf-8  
		baos.close();  
		return status;  
	}

}
